不可变

对于一个不可变的值,如果不创建一个全新的值替换它,它的内容是无法更改的。

JavaScript 中,原始值是不可变的——一旦创建了原始值,它就不能被改变,尽管持有它的变量可以被重新分配另一个值。相比之下,对象数组默认是可变的——它们的属性和元素可以在不重新分配新值的情况下更改。

由于以下几个原因,使用不可变的对象可能是有益的:

  • 提高性能(不计划将来更改对象)
  • 为了减少内存使用(进行对象引用,而不是克隆整个对象)
  • 线程安全(多个线程可以引用同一对象,而不会相互干扰)
  • 降低开发人员的精神负担(对象的状态不会改变,其行为始终是一致的)

注意,你可以很容易证明可变性:只要对象提供一种方式来更改其属性,它就是可变的。另一方面,如果没有语言语义来保护它,就很难证明不可变性——这是一个开发人员约定俗成的问题。例如,Object.freeze() 是一种语言层面的方法,用于使对象在 JavaScript 中不可变。

参见